<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        function Star(uname, age) {
            this.uname = uname
            this.age = age
        }

        var ldh = new Star('刘德华', 18)
        // 1.自身查找成员
        // ldh.sex = '男'
        // console.log(ldh.sex);//男 

        // 2.往上在Star原型对象身上查找成员
        // Star.prototype.sex = '女'
        // console.log(ldh.sex);//女

        // 3.在往上 在Object原型对象查找成员
        // Object.prototype.sex = '男'
        // console.log(ldh.sex);//男

        // 4.在往上查找呢？Object的对象原型__proto__指向null 为空了
        // console.log(ldh.sex);//undefined

        // 5.如果自身对象有这个属性,原型对象也有这个属性 此时会输出那个呢？
        Star.prototype.sex = '女'
        ldh.sex = '男'
        console.log(ldh.sex);//男 都有同样属性的的情况下优先执行自身的

        // 6.孩子自身没有的方法,但是父辈原型对象有(Star/Objec) 可以直接使用(因为__proto__嘛 会自动向上查找原型对象)
        // 比如说Object里有toString()方法.Star和ldh实例都没有,但是都可以直接使用toString()方法
        console.log(Object.prototype);//Object原型对象是有toString()方法的
        console.log(ldh);//无
        console.log(Star.prototype);//无
        console.log(ldh.toString());//[Object Object] 没有报错 就是直接可以使用的 正好对应ldh里的两个实例成员uname age 

        // 按照原型链的方式去查找 先看对象自身有没有这个成员 如果有就输出 如果没有则去上一级原型对象查找 有就执行 如果没有则在往上一级原型对象查找 直至为null找不到为止 输出的结果就为undefined
        // 输出的属性 如果对象与原型对象都有的情况下 优先执行调用者自身的。


    </script>
</body>

</html>